🧰 Отладка и устранение ошибок сборки
🎯 Цель раздела
После прохождения этой темы вы:
- научитесь читать и анализировать логи сборки;
- освоите инструменты
mockиchrootдля диагностики; - узнаете, как устранять типовые ошибки
rpmbuild; - сможете воспроизводить и исправлять проблемы пакетов в изолированной среде.
🧩 Где искать логи
При каждой сборке rpmbuild создаёт лог в каталоге:
~/rpmbuild/BUILD/
или рядом с собранным RPM:
~/rpmbuild/RPMS/x86_64/hello-1.1-2.x86_64.rpm
~/rpmbuild/BUILD/hello-1.1/
~/rpmbuild/BUILDROOT/hello-1.1-2.x86_64/
Логи ошибок обычно выводятся прямо в консоль, но можно перенаправить их в файл:
rpmbuild -ba SPECS/hello.spec | tee build.log
💡 Команда
teeсохраняет вывод и одновременно отображает его в терминале.
⚙️ Типовые ошибки сборки и их решения
| Сообщение об ошибке | Причина | Решение |
|---|---|---|
File not found by glob | Указан неверный путь в %files | Проверьте пути и наличие файлов в buildroot |
Permission denied | Нет прав на запись или запуск | Используйте chmod, install -m 0755 |
command not found | Отсутствует зависимость | Добавьте нужный пакет в BuildRequires |
Bad exit status from /var/tmp/... | Ошибка во время сборки | Смотрите лог в BUILD/имя/ |
error: Patch failed | Патч не применился | Проверьте нумерацию и параметр -p1 |
RPM build errors: | Общая ошибка сборки | Пролистайте лог вверх до конкретного сообщения |
🧱 Пример разборки ошибки
+ /usr/bin/install -m 0755 hello /usr/bin/
install: cannot create regular file '/usr/bin/': Permission denied
Ошибка: установка выполняется в реальную систему, а не в buildroot. Исправление:
install -m 0755 hello %{buildroot}%{_bindir}/hello
🧪 Использование mock
mock — инструмент для сборки пакетов в чистой и изолированной среде, полностью повторяющей окружение ABF.
Установка и настройка
sudo dnf install mock
sudo usermod -a -G mock $USER
⚠️ После добавления пользователя в группу
mockнеобходимо перелогиниться.
Проверка
mock --version
🧩 Сборка через mock
-
Сгенерируйте SRPM:
rpmbuild -bs SPECS/hello.spec -
Передайте SRPM в mock:
mock rebuild ~/rpmbuild/SRPMS/hello-1.1-2.src.rpm
Mock автоматически:
- создаст chroot;
- установит все зависимости;
- выполнит сборку изолированно;
- сохранит результаты в
/var/lib/mock/<target>/result/.
🧱 Структура mock-окружения
/var/lib/mock/
├── rosa2024.1-x86_64/
│ ├── root/ # chroot окружение
│ ├── result/ # результат сборки (RPM, SRPM, лог)
│ └── build.log
💡 Вы можете проверить содержимое chroot:
sudo mock -r rosa2024.1-x86_64 --shell
🧩 Анализ логов mock
После сборки загляните в:
/var/lib/mock/rosa2024.1-x86_64/result/build.log
Команда для быстрого поиска ошибок:
grep -A3 -B3 "error:" /var/lib/mock/rosa2024.1-x86_64/result/build.log
🧰 Диагностика в chroot
Если нужно вручную повторить шаги сборки:
sudo mock -r rosa2024.1-x86_64 --shell
Внутри окружения:
cd /builddir/build/BUILD/hello-1.1
make
make install DESTDIR=/builddir/build/BUILDROOT/hello-1.1-2.x86_64
Это помогает понять, на каком этапе происходит сбой.
🔄 Воспроизведение ошибок ABF локально
Если пакет не собирается в Automated Build Farm (ABF), можно повторить процесс через mock, используя ту же конфигурацию сборочного окружения (rosa2024.1).
Это гарантирует одинаковый результат локальной и серверной сборки.
🧠 Мини-тест для самопроверки
| Вопрос | Ответ |
|---|---|
| Где хранятся логи сборки? | В ~/rpmbuild/BUILD/ и /var/lib/mock/.../result/ |
Что делает mock rebuild? | Собирает SRPM в изолированной среде |
Как исправить Permission denied при установке? | Использовать %{buildroot} |
Что означает File not found by glob? | Неверно указан путь в %files |
| Как воспроизвести окружение ABF локально? | Через mock -r rosa2024.1-x86_64 |
🧭 Итого
Теперь вы:
- умеете анализировать ошибки сборки;
- знаете, где искать и как читать логи;
- используете
mockиchrootдля воспроизведения проблем; - готовы перейти к следующему этапу — проверке качества и соблюдению стандартов ROSA.
Следующий документ — “Проверка качества пакетов”, где вы узнаете о rpmlint, политике ROSA Packaging Guidelines и контроле стабильности пакетов.